export function params(){

  const D01 = {
      0x0: '初始化',
      0x1: '执行中',
      0x2: '已完成'
  }

  const D02 = {
      0x1: '待机',
      0x2: '被动扫描',
      0x3: '主动扫描',
      0x4: '内定标'
  }
  const D03={
      0b00:'星下点视场',
      0b01:'积分球视场',
      0b10:'黑体视场'
  }
  const D04={
      0b00: '关闭',
      0b01: '定标灯亮'
  }
  const D05={
      0b00: '关闭',
      0b01: '积分球亮'
  }
  const D06={
      0b00: '关闭',
      0b01: '温控1完成',
      0b10: '温控2完成',
      0b11: '温控3完成'
  }
  const D07={
      0x00: '无错误',
      0x11: '奇偶校验错误',
      0x12: '停止位错误',
      0x13: '字符间隔错误',
      0x21: '载荷标识错误',
      0x22: '指令类型错误',
      0x23: '指令长度错误',
      0x24: '累加和错误'
  }
  const D08={
      0x00: '初始化',
      0x01: '执行中',
      0x02: '已完成'
  }
  const D09={
      0x0: '初始化',
      0x1: '采集中',
      0x2: '采集已完成'
  }
  const D10={
      0x0: '未完成',
      0x1: '已完成'
  }
  const PA_D = {
      'a013': {'a': 1.73692457335667E-9, 'b': -2.77395127269813E-7, 'c': 9.90414540695741E-4, 'd': 2.36032276935574, 'e': -245.831329196785},
      'a014': {'a':-416.2,'b':795.9,'c':-964.6,'d':683.2},
      'a020': {'a': -4.883211E-9, 'b':2.48837E-5,'c':0.22036,'d':32.72152},
      'a025': {'P1': 1.58439016745258e-12, 'P2': -7.92287831606574e-09, 'P3': 2.47005329173031e-05, 'P4': 0.223949991222281, 'P5': -242.328802679155},
      'a027': {'a': -4.883211E-9, 'b':2.48837E-5,'c':0.22036,'d':32.72152},
      'a028': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a029': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a030': {'a': -416.2, 'b': 795.9, 'c': -964.6, 'd': 683.2},
      'a031': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a032': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a033': {'a': -4.883211E-9, 'b':2.48837E-5,'c':0.22036,'d':32.72152},
      'a034': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a035': {'a': -4.883211E-9, 'b':2.48837E-5,'c':0.22036,'d':32.72152},
      'a036': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a037': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
      'a038': {'a': -6.01188, 'b': 4622.53337, 'c': -86421.72414, 'R0': 20000, 'VCC': 3.3},
  }

  const tosc = (v) => {
        if ((v&0xFF) > 0x80){
            return v - 256
        }
        else {
            return v
        }

  }
  const F01 = (v, n)=>{
      let V = v*3.3/255
      let nn= 4.99*(1+49.4/1.203)
      let nn2 = 239.5/(5600+239.5)
      let Nr = (V/nn+nn2)*5600
      let Dr = 1-(V/nn+nn2)
      let R = Nr/Dr - 197.5202
      let a = PA_D[n]['a']
      let b = PA_D[n]['b']
      let c = PA_D[n]['c']
      let d = PA_D[n]['d']
      let e = PA_D[n]['e']
      let T = F02(R,a,b,c,d,e)
      return T
  }
  const F02 = (R,a,b,c,d,e,flag=false)=>{
      let T = a * R ** 4 + b * R ** 3 + c * R ** 2 + d * R + e
      return T
  }
  const F03 = (v, n)=>{
      let V = (v*3.3/(255*3.6)+2.20894-0.61868*(v/255)*3.3-0.02883*(v*3.3/255)**2)/2
      let a = PA_D[n]['a']
      let b = PA_D[n]['b']
      let c = PA_D[n]['c']
      let d = PA_D[n]['d']
      let T = F04(V,a,b,c,d)
      return T
  }
  const F04 = (R,a,b,c,d,flag=false)=>{
      let T = a * R ** 3 + b * R ** 2 + c * R + d
      return T
  }
  const F05 = (v, n)=>{
      let θ = (360*v)/51840
      return θ
  }
  const F06 = (v,n)=>{
      let V = v*3.3/255
      let nn = 5*(1+49.4/1.8)
      let nn2 = (240)/(47000+240)
      let Nr = (V/nn+nn2)*47000
      let Dr = 1-(V/nn+nn2)
      let R = Nr/Dr
      let a = PA_D[n]['a']
      let b = PA_D[n]['b']
      let c = PA_D[n]['c']
      let d = PA_D[n]['d']
      let T = F04(R,a,b,c,d)
      T -= 273.15
      return T
  }
  const F07 = (v,n)=>{
      let A = (3.3*v/255)/(0.01*(1+49.4))
      return A
  }
  const F08 = (v,n)=>{
      let V = (3.3*v*105.1)/(5.1*255)
      return V
  }
  const F09 = (v,n)=>{
      let A = (3.3*v/255)/(0.15*51)
      return A
  }
  const F10 = (v,n)=>{
     // v = v>=0b10000000?v-0b100000000:v
      v = tosc(v)
      // console.log(v)
    // let fh = (v>>7)&1
    //   v = fh? v&0b01111111 : -(v&0b01111111)
      let V = v*10/127
      let nu = 1+49.4/0.098
      let nn = 1.1111/(110.785+1.1111)
      let Nr = (V/(5*nu)+nn)*110785
      let Dr = 1-(V/(5*nu)+nn)
      let Rt = Nr/Dr
      let P1 = PA_D[n]['P1']
      let P2 = PA_D[n]['P2']
      let P3 = PA_D[n]['P3']
      let P4 = PA_D[n]['P4']
      let P5 = PA_D[n]['P5']
      let T = F02(Rt,P1,P2,P3,P4,P5)
      return T
  }
  const F11 = (v,n)=>{
      let Y = -0.5685 * v + 30.353
      return Y
  }
  const F12 = (v,n)=>{
      let V = (v*3.3/255)
      let a = PA_D[n]['a']
      let b = PA_D[n]['b']
      let c = PA_D[n]['c']
      let R0 = PA_D[n]['R0']
      let VCC = PA_D[n]['VCC']
      let T = 2*c / (-b + (b**2-4*c*(a-Math.log(V*R0/(VCC-V))))**0.5) - 273.15
      return parseFloat(T.toFixed(3))
  }
  const F13 = (v,n)=>{
      let a = PA_D[n]['a']
      let b = PA_D[n]['b']
      let c = PA_D[n]['c']
      let d = PA_D[n]['d']
      let nu = v*3.3/255
      let V = (v*3.3/(255*2.7*10) + 1.82878+0.27327 * nu- 0.08255 * nu ** 2)/2
      let T = F04(V,a,b,c,d)
      return T
  }
        const TD01=(v)=>{
      // d: 时区为北京时的时候， 转换最终时间 需要减去offset 方可用 toISO 方法显示为北京时 - t.getTimezoneOffset()*60e3
      // 	  // d 指定时区为utc / toiso 也是utc 也就是与开始时间处于同一时区，处理过程就不需要在考虑时区问题了
       	        let d = new Date('2020-01-01T00:00:00Z')
       	        let t = parseInt(v.toString(16).padStart(12,0).slice(0,8),16)*1000 + (v & 0xFFFF)  + d.getTime()
       	        return new Date(t).toISOString().slice(0,23).replace('T',' ')
       	                        }
  return [
//      1.			包同步码		16			0xEB90
      new Params('a001', '包同步码', 16, null, null, null, null),
//      2.			包标识		16			0x091A	/	/	/	/
      new Params('a002', '包标识', 16, null, null, null, null),
//      3.			包序		16
      new Params('a003', '包序', 16, null, null, null, null),
//      4.			包长		16			0x2F
      new Params('a004', '包长', 16, null, null, null, null),
//      5.			副导头（时间码）		48		源码
      new Params('a005', '副导头（时间码）', 48, null, v=>TD01(v), null, null),
//      6.			命令类型		8			0x25	/	/	/	/
      new Params('a006', '命令类型', 8, null, null, null, null),
//7.			可见红外成像光谱仪正确接收数据注入计数	/	4	1553B	表格	十进制解析/	/	/	/
      new Params('a007', '可见红外成像光谱仪正确接收数据注入计数', 4, null, null, null, null),
//8.			可见红外成像光谱仪错误接收指令计数	/	4	1553B	表格	十进制解析	/	/	/	/
      new Params('a008', '可见红外成像光谱仪错误接收指令计数', 4, null, null, null, null),
//      9.			可见红外成像光谱仪内部注入指令转发计数	/	4	1553B	表格	十进制解析	/	/	/	/
      new Params('a009', '可见红外成像光谱仪内部注入指令转发计数', 4, null, null, null, null),
//      10.			可见红外成像光谱仪内部指令应答错误计数	/	4	1553B	表格	十进制解析	/	/	/	/
      new Params('a010', '可见红外成像光谱仪内部指令应答错误计数', 4, null, null, null, null),
//    11.			可见红外成像光谱仪注入指令执行状态	/	4	1553B	表格	0x0初始化；0x1执行中；0x2已完成	/	/	/	/
      new Params('a011', '可见红外成像光谱仪注入指令执行状态', 4, null, null,v=>D01[v], null),
//12.			可见红外成像光谱仪工作模式	/	4	1553B	表格	0x1 待机；0x2被动扫描；
//0x3主动扫描；0x4内定标	/	/	/	/
      new Params('a012', '可见红外成像光谱仪工作模式', 4, null, null,v=>D02[v], null),
//13.			可见红外成像光谱仪可见探测器温度	℃	8	1553B	表格、曲线	按公式解析，见注8：	350	70	/	/ **
      new Params('a013', '可见红外成像光谱仪可见探测器温度', 8, '℃', v=>F01(v, 'a013'), v=>v.toFixed(3), null),
//      14.			可见红外成像光谱仪短中波焦平面温度	K	8	1553B	表格、曲线	按公式解析，见注1：	350	60	/	/
      new Params('a014', '可见红外成像光谱仪短中波焦平面温度', 8, 'K', v=>F03(v, 'a014'),v=>v.toFixed(3), null),
//15.			可见红外成像光谱仪指向机构角度	°	16	1553B	表格、曲线	按公式解析，见注2：	360	0	/	/
      new Params('a015', '可见红外成像光谱仪指向机构角度', 16, '°', v=>F05(v, 'a015'),v=>v.toFixed(3), null),
//16.			可见红外成像光谱仪定标机构位置	/	2	1553B	表格	2’b00:星下点视场
//2’b01:积分球视场
//2’b02:黑体视场	/	/	/	/
      new Params('a016', '可见红外成像光谱仪定标机构位置', 2, null,null, v=>D03[v], null),
//17.			可见红外成像光谱仪定标灯状态	/	2	1553B	表格	2’b00:关闭
//2’b01:定标灯亮	/	/	/	/
      new Params('a017', '可见红外成像光谱仪定标灯状态', 2, null,null, v=>D04[v], null),
//18.			可见红外成像光谱仪积分球状态	/	2	1553B	表格	2’b00:关闭
//2’b01:积分球亮	/	/	/	/
      new Params('a018', '可见红外成像光谱仪积分球状态', 2, null,null, v=>D05[v], null),
//19.			可见红外成像光谱仪黑体状态	/	2	1553B	表格	2’b00:关闭
//2’b01:温控1完成
//2’b10:温控2完成
//2’b11:温控3完成	/	/	/	/
      new Params('a019', '可见红外成像光谱仪黑体状态', 2, null, v=>D06[v], null),
//20.			可见红外成像光谱仪中波光谱仪框架温度	℃	8	1553B	表格、曲线	按公式解析，见注4：	45	-140	/	/ **
      new Params('a020', '可见红外成像光谱仪中波光谱仪框架温度', 8, '℃', v=>F06(v, 'a020'),v=>v.toFixed(3), null),
//21.			可见红外成像光谱仪短中波制冷机电流	A	8	1553B	表格、曲线	按公式解析，见注10：	24±1	0±1	/	/
      new Params('a021', '可见红外成像光谱仪短中波制冷机电流', 8, 'A', v=>F07(v, 'a021'),v=>v.toFixed(3), null),
//22.			可见红外成像光谱仪短中波制冷机24V电压	V	8	1553B	表格、曲线	按公式解析，见注5：	24±1	0±1	/	/
      new Params('a022', '可见红外成像光谱仪短中波制冷机24V电压', 8, 'V', v=>F08(v, 'a022'),v=>v.toFixed(3), null),
//23.			可见红外成像光谱仪积分球电流	A	8	1553B	表格、曲线	按公式解析，见注6：	/	/	/	/
      new Params('a023', '可见红外成像光谱仪积分球电流', 8, 'A', v=>F09(v, 'a023'),v=>v.toFixed(3), null),
//24.			可见红外成像光谱仪定标灯电流	A	8	1553B	表格、曲线	按公式解析，见注6：	/	/	/	/
      new Params('a024', '可见红外成像光谱仪定标灯电流', 8, 'A', v=>F09(v, 'a024'),v=>v.toFixed(3), null),
//25.			可见红外成像光谱仪黑体温度	℃	8	1553B	表格、曲线	按公式解析，见注7：	150	-45	/	/
      new Params('a025', '可见红外成像光谱仪黑体温度', 8, '℃', v=>F10(v, 'a025'),v=>v.toFixed(3), null),
  //26.			可见红外成像光谱仪定标电机角度	℃	8	1553B	表格、曲线	按公式解析，见注9：	45	-40	/	/ **
      new Params('a026', '可见红外成像光谱仪定标电机角度', 8, '℃', v=>F11(v, 'a026'),v=>v.toFixed(3), null),
//27.			可见红外成像光谱仪辐射器温度	℃	8	1553B	表格、曲线	按公式解析，见注4：	350	-160	/	/
      new Params('a027', '可见红外成像光谱仪辐射器温度', 8, '℃', v=>F06(v, 'a027'),v=>v.toFixed(3), null),
//28.			可见红外成像光谱仪指向电机温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-40	/	/
      new Params('a028', '可见红外成像光谱仪指向电机温度', 8, '℃', v=>F12(v, 'a028'),v=>v.toFixed(3), null),
//29.			可见红外成像光谱仪可见光谱仪框架温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	/	/	/	/
      new Params('a029', '可见红外成像光谱仪可见光谱仪框架温度', 8, '℃', v=>F12(v, 'a029'),v=>v.toFixed(3), null),
//30.			可见红外成像光谱仪中波焦平面温度（精测）	℃	8	LVDS	表格、曲线	按公式解析，见注11：	45	-40	/	/ **
      new Params('a030', '可见红外成像光谱仪中波焦平面温度（精测）', 8, '℃', v=>F13(v, 'a030'),v=>v.toFixed(3), null),
//31.			可见红外成像光谱仪安装底板温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-140	/	/
      new Params('a031', '可见红外成像光谱仪安装底板温度', 8, '℃', v=>F12(v, 'a031'),v=>v.toFixed(3), null),
//32.			可见红外成像光谱仪指向编码器温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	60	-40	/	/
      new Params('a032', '可见红外成像光谱仪指向编码器温度', 8, '℃', v=>F12(v, 'a032'),v=>v.toFixed(3), null),
//33.			可见红外成像光谱仪狭缝温度	℃	8	LVDS	表格、曲线	按公式解析，见注4：	45	-40	/	/ **
      new Params('a033', '可见红外成像光谱仪狭缝温度', 8, '℃', v=>F06(v, 'a033'),v=>v.toFixed(3), null),
//34.			可见红外成像光谱仪望远镜框架温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-40	/	/
      new Params('a034', '可见红外成像光谱仪望远镜框架温度', 8, '℃', v=>F12(v, 'a034'),v=>v.toFixed(3), null),
//35.			可见红外成像光谱仪杜瓦窗口温度	℃	8	LVDS	表格、曲线	按公式解析，见注4：	45	-140	/	/ **
      new Params('a035', '可见红外成像光谱仪杜瓦窗口温度', 8, '℃', v=>F06(v, 'a035'),v=>v.toFixed(3), null),
//36.			可见红外成像光谱仪中波制冷机安装面温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-40	/	/
      new Params('a036', '可见红外成像光谱仪中波制冷机安装面温度', 8, '℃', v=>F12(v, 'a036'),v=>v.toFixed(3), null),
//      37.			可见红外成像光谱仪积分球温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-40	/	/
      new Params('a037', '可见红外成像光谱仪积分球温度', 8, '℃', v=>F12(v, 'a037'),v=>v.toFixed(3), null),
//38.			可见红外成像光谱仪光谱定标灯温度	℃	8	LVDS	表格、曲线	按公式解析，见注3：	45	-40	/	/
      new Params('a038', '可见红外成像光谱仪光谱定标灯温度', 8, '℃', v=>F12(v, 'a038'),v=>v.toFixed(3), null),
//39.			上一次错误外部指令检测类型	/	8	LVDS	表格	0x00：无错误
//0x 11：奇偶校验错误
//0x 12：停止位错误
//0x 13：字符间隔错误
//0x 21：载荷标识错误
//0x 22：指令类型错误
//0x 23：指令长度错误
//0x 24：累加和错误	/	/	/	/
      new Params('a039', '上一次错误外部指令检测类型', 8,null, null,v=>D07[v], null),
//40.			上一次错误外部指令类型码	/	8	LVDS	表格	按十六进制原码解析	/	/	/	/
      new Params('a040', '上一次错误外部指令类型码', 8,null, null, null, null),
//41.			上一次内部指令错误检测类型	/	8	LVDS	表格	0x00：无错误
//0x 11：奇偶校验错误
//0x 12：停止位错误
//0x 13：字符间隔错误
//0x 21：载荷标识错误
//0x 22：指令类型错误
//0x 23：指令长度错误
//0x 24：累加和错误	/	/	/	/
      new Params('a041', '上一次内部指令错误检测类型', 8,null, null,v=>D07[v], null),
//42.			上一次错误内部指令类型码	/	8	LVDS	表格	按十六进制原码解析	/	/	/	/
      new Params('a042', '上一次错误内部指令类型码', 8,null, null, null,null),
//      43.			内部转发指令执行状态		8			0X00初始化；0X01执行中；0X02已完成				/
      new Params('a043', '内部转发指令执行状态', 8,null, null,v=>D08[v], null),
//44.			探测器采集状态		4			0x0初始化；
//0x1采集中；
//0x2采集已完成				/
      new Params('a044', '内部转发指令执行状态', 4,null, null,v=>D09[v], null),
//45.			角度专用RS422接收错误计数		4	LVDS	表格	十进制解析				/
      new Params('a045', '角度专用RS422接收错误计数', 4,null, null,null, null),
//46.			RS422复位计数		4	LVDS	表格	十进制解析				/
      new Params('a046', 'RS422复位计数', 4,null, null, null,null),
//47.			紧急断电计数		4	LVDS	表格	十进制解析				/
      new Params('a047', '紧急断电计数', 4,null, null, null,null),
//48.			指向机构超时计数	/	4	LVDS		Bit7～4：十进制数	/	/	/	/
      new Params('a048', '指向机构超时计数', 4,null, null, null,null),
//      49.			定标机构超时计数		4			Bit3～0：十进制数
      new Params('a049', '定标机构超时计数', 4,null, null, null,null),
//      50.			编码器状态	/	4			按照0001二进制形式显示
      new Params('a050', '编码器状态', 4,null, null, null,null),
//51.			制冷状态	/	4			0x0：未完成
//0x1：已完成				/
      new Params('a051', '制冷状态', 4,null,null, v=>D10[v], null),
//      52.			备用（4字节）	/	32	1553B	表格		/	/	/	/
      new Params('a052', '备用', 32,null, null, null,null),
//      53.			校验和	/	8	1553B	表格	十进制解析	/	/	/	/
      new Params('a053', '校验和', 8,null, null, null,null),
  ]


}
